package com.dai.zhenfujin.base;

import android.app.Application;
import android.content.Context;
import android.os.Handler;
import android.support.multidex.MultiDex;

import com.dai.zhenfujin.receiver.HMSPushHelper;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;
import com.hyphenate.easeui.EaseUI;
import com.hyphenate.push.EMPushConfig;
import com.hyphenate.push.EMPushHelper;
import com.hyphenate.push.EMPushType;
import com.hyphenate.push.PushListener;
import com.hyphenate.util.EMLog;
import com.mob.MobSDK;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.orhanobut.logger.LogLevel;
import com.orhanobut.logger.Logger;
import com.tencent.bugly.Bugly;

public class BaseApplication extends Application {
    /**
     * 主线程ID
     */
    private static int mMainThreadId = -1;

    public static Context applicationContext;
    private static BaseApplication instance;
    /**
     * 主线程Handler
     */
    private static Handler mMainThreadHandler;


    public static Context getContext() {
        return applicationContext;
    }

    public static BaseApplication getApplication() {
        return instance;
    }

    /**
     * 获取主线程的handler
     */
    public static Handler getMainThreadHandler() {
        return mMainThreadHandler;
    }


    /**
     * 获取主线程ID
     */
    public static int getMainThreadId() {
        return mMainThreadId;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        applicationContext = this;
        instance = this;
        mMainThreadHandler = new Handler();
        MobSDK.init(this);
        EMOptions options = new EMOptions();
        // 默认添加好友时，是不需要验证的，改成需要验证 //不需要验证
        options.setAcceptInvitationAlways(true);
        // 是否自动将消息附件上传到环信服务器，默认为True是使用环信服务器上传下载，如果设为 false，需要开发者自己处理附件消息的上传和下载
        options.setAutoTransferMessageAttachments(true);
        // 是否自动下载附件类消息的缩略图等，默认为 true 这里和上边这个参数相关联
        options.setAutoDownloadThumbnail(true);
        //自动登录
      //  options.setAutoLogin(true);
        //发布时
        Bugly.init(getApplication(), "e69f28aed2", false);
        //在做打包混淆时，关闭debug模式，避免消耗不必要的资源
        //华为推送
        EMPushConfig.Builder builder = new EMPushConfig.Builder(applicationContext);
        builder.enableVivoPush() // 推送证书相关信息配置在AndroidManifest.xml中
                // .enableMeiZuPush(String appId, String appKey)
                 .enableMiPush("2882303761518103504", "5611810343504")
                .enableOppoPush("1e9c94a1ac724d6c9f90eebde9450e63", "127696bbf2c94b3c9be363ca7b700683")
                .enableVivoPush()
                .enableHWPush();//开发者需要调用该方法来开启华为推送
        //  .enableFCM(String senderId); //开发者需要调用该方法来开启FCM推送
        //  builder.enableHWPush();

        options.setPushConfig(builder.build());
        //初始化
        EMClient.getInstance().init(applicationContext, options);
        // 开启 debug 模式
        EMClient.getInstance().setDebugMode(true);

        //  DemoHelper.getInstance().init(applicationContext);
        Logger.init("hhh")
                .methodOffset(2)
                .methodCount(2)
                .hideThreadInfo()
                .logLevel(LogLevel.FULL);
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
        ImageLoader.getInstance().init(configuration);

        // 请确保环信SDK相关方法运行在主进程，子进程不会初始化环信SDK（该逻辑在EaseUI.java中）
        if (EaseUI.getInstance().isMainProcess(this)) {
            // 初始化华为 HMS 推送服务, 需要在SDK初始化后执行
            HMSPushHelper.getInstance().initHMSAgent(instance);

            EMPushHelper.getInstance().setPushListener(new PushListener() {
                @Override
                public void onError(EMPushType pushType, long errorCode) {
                    // TODO: 返回的errorCode仅9xx为环信内部错误，可从EMError中查询，其他错误请根据pushType去相应第三方推送网站查询。
                    EMLog.e("HWHMSPush", "Push client occur a error: " + pushType + " - " + errorCode);
                }
            });
        }
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        // you must install multiDex whatever tinker is installed!
        MultiDex.install(base);
    }

    public static BaseApplication getInstance() {
        return instance;
    }


}
